/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package eeep.controle;

import eeep.dao.EmprestimoDAO;
import eeep.dao.LivroDAO;
import eeep.dao.ReservaDAO;
import eeep.entidades.Emprestimo;
import eeep.entidades.Livro;
import eeep.excecoes.LJEException;
import eeep.excecoes.LJRException;
import java.time.Clock;
import java.util.Date;

/**
 *
 * @author Junior
 */
public class EmprestimoControle {

    EmprestimoDAO emprestimoDao = new EmprestimoDAO();
    ReservaDAO reservaDao = new ReservaDAO();
    LivroDAO livroDao = new LivroDAO();

    public void EmprestarLivro(Emprestimo emprestimo) throws LJEException, LJRException {
        Livro livro = livroDao.getLivroPorCodigo(emprestimo.getLivro().getCodigo());
        if (livro.isStatus()) {
            if (reservaDao.pegarFilaReserva(emprestimo.getLivro().getId()) == 0) {
//           System.out.println(livro.isStatus());
                emprestimoDao.EmprestarLivro(emprestimo);
                livroDao.atualizarStatusLivroEmprestimo(livro.getCodigo());
            } else {
                if(reservaDao.pegarFilaPessoa(emprestimo.getPessoa().getId(), emprestimo.getLivro().getId())==0){
                    emprestimoDao.EmprestarLivro(emprestimo);
                }else{
                    throw new LJRException(reservaDao.pegarPessoaReserva(emprestimo.getLivro().getId(), emprestimo.getPessoa().getId()));
                }
            }
        } else {
            throw new LJEException();
        }
    }

    public void reservarLivro(Emprestimo emprestimo) {
        Livro livro = livroDao.getLivroPorCodigo(emprestimo.getLivro().getCodigo());
        if (livro.isStatus()) {
//           System.out.println(livro.isStatus());
            emprestimoDao.EmprestarLivro(emprestimo);
            livroDao.atualizarStatusLivroEmprestimo(livro.getCodigo());
        } else {
            Date reserva = new Date();
            int fila = reservaDao.pegarFilaReserva(emprestimo.getLivro().getId()) + 1;
            reservaDao.reservarLivro(emprestimo.getPessoa().getId(), emprestimo.getLivro().getId(), reserva, fila);
//           System.out.println(fila);

        }
    }

    public void DevolverLivro(Emprestimo emprestimo) {
        Livro livro = livroDao.getLivroPorCodigo(emprestimo.getLivro().getCodigo());
        if (reservaDao.pegarFilaReserva(emprestimo.getLivro().getId()) == 0) {
            if (!livro.isStatus()) {

                livroDao.atualizarStatusLivroDevolucao(livro.getCodigo());
                emprestimoDao.DevolverLivro(emprestimo);
            }
        } else {
            reservaDao.atualizarFila(emprestimo.getLivro().getId());
        }
    }

}
